package Negocio;

import ClassesBasicas.Pais;
import Repositorio.RepPais;
import erro.ConexaoException;
import erro.NegocioException;
import erro.RepositorioException;
import java.util.ArrayList;

/**
 * Classe que define a regra de Negocio para um Pais e suas validacoes
 * 
 * @author Kledson
 * 
 */

public class NegocioPais {

	private RepPais rep;
	
	public NegocioPais(){
		rep = new RepPais();
	}
	
	/**
	 * Testa se Pais ja existe, caso sim retorna a true, caso contrario, retorna false 
	 * 
	 * @param p
	 * @throws NegocioException
	 * 
	 */
	
	public boolean existePais(Pais p) throws NegocioException {
		Pais pais = new Pais();
		
			pais = consultar(p.getNomePais());
			
			if(pais!= null)
				return true;
			else
				return false;
	}
	
	/**
	 * Validacao dos campos da classe Pais antes de salvar	
	 * 
	 * @param p
	 * @throws NegocioException
	 * 
	 */
	
	public void salvar(Pais p) throws NegocioException{
		
		 if(!ValidacoesGerais.isNomeValid(p.getNomePais())){
			 throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
		 }
		
		if(p.getNomePais().equals("") || p.getNomePais() == null){
			throw new NegocioException("Nome inv�lido");
		}
		
		if(p.getCodPais()<0){
			throw new NegocioException("codigo invalido");
		}
		
		try {
			rep.salvar(p);
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		} 
		catch (RepositorioException e) {
			throw new NegocioException("Erro ao Salvar uma Pais "+e.getMessage());
		}
	}
	
	/**
	 * Valida e exclui um Pais pelo codigo 
	 * 
	 * @param codigo
	 * @throws NegocioException
	 * 
	 */
	
	public void excluir(int codigo) throws NegocioException{
		
		if(codigo <= 0){
			throw new NegocioException("Codigo Inv�lido");
		}
		
		try {
			rep.excluir(codigo);
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao Excluir uma Pais "+e.getMessage());
		}
	}
	
	/**
	 * Valida e exclui uma Pais pelo nome
	 * 
	 * @param nome
	 * @throws NegocioException
	 * 
	 */
	
	public void excluir(String nome) throws NegocioException{
		
		
		if(!ValidacoesGerais.isNomeValid(nome)){
			throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
		}
		
		if(nome == null || nome.equals("")){
			throw new NegocioException("Nome inv�lido");
		}
		
		try {
			rep.excluir(nome);
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conx�o com o Banco de Dados "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao excluir uma Pais "+e.getMessage());
		}
	}
	
	/**
	 * valida e consulta um Pais pelo codigo
	 * 
	 * @param codigo
	 * @throws NegocioException
	 * 
	 */
	
	public Pais consultar(int codigo) throws NegocioException{
		 Pais p = null;
		 
		 if(codigo <= 0){
			 throw new NegocioException("Codigo Inv�lido");
		 }
		 
		 try {
			p = rep.consultar(codigo);
			
			
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados "+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao consultar uma Pais "+e.getMessage());
		}
		 return p;
	}
	
	/**
	 * valida e consulta um Pais pelo nome
	 * 
	 * @param nome
	 * @throws NegocioException
	 * 
	 */
	
	public Pais consultar(String  nome) throws NegocioException{
		 Pais p = null;
		 
		 if(!ValidacoesGerais.isNomeValid(nome)){
			 throw new NegocioException("Este campo n�o pode conter caracteres num�ricos nem especiais");
		 }
		 
		 if(nome == null ||nome.equals("")){
			 throw new NegocioException("nome Inv�lida");
		 }
		 
		 try {
			p = rep.consultar(nome);	
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados."+e.getMessage());
		} catch (RepositorioException e) {			
			throw new NegocioException("Erro ao consultar uma Pais."+e.getMessage());
		}			
		 return p;		
	}
	
	/**
	 * Lista todos os Paises. Caso nao haja, retorna uma lista vazia!
	 * 
	 * @return ArrayList<Pais>
	 * @throws NegocioException
	 * 
	 */
	
	public ArrayList<Pais> listarPais() throws NegocioException{
		
		ArrayList<Pais> list = null;
		
		try {
			list = (ArrayList<Pais>) rep.listar();
		} catch (ConexaoException e) {
			throw new NegocioException("Verifique a conex�o com o Banco de Dados."+e.getMessage());
		} catch (RepositorioException e) {
			throw new NegocioException("Erro ao listar Paises!" +e.getMessage());
		}
		return list;
	}
}
